Jika Anda ingin menghapus objek setelah setiap respons Anda tidak memerlukan sesi,
Jika Anda ingin menyimpan objek selama sesi pengguna, Ada beberapa cara:
langsung menambahkan satu atribut ke sesi:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
dan Anda bisa mendapatkannya dari pengontrol seperti ini:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Jadikan sesi pengontrol Anda tercakup
@Controller
@Scope("session")
Cakupan Objek, misalnya Anda memiliki objek pengguna yang harus berada dalam sesi setiap saat:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
lalu masukkan kelas di setiap pengontrol yang Anda inginkan
@Autowired
private User user
yang membuat kelas tetap dalam sesi.
Injeksi proxy AOP: di musim semi -xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="user" class="com.User" scope="session">
<aop:scoped-proxy/>
</bean>
</beans>
lalu masukkan kelas di setiap pengontrol yang Anda inginkan
@Autowired
private User user
5. Lewati HttpSession ke metode:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6. Buat ModelAttribute di sesi Dengan @SessionAttributes ("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
atau Anda dapat menambahkan Model Ke seluruh Kelas Pengontrol seperti,
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
masing-masing memiliki kelebihan dan kekurangan:
@session dapat menggunakan lebih banyak memori dalam sistem cloud itu menyalin sesi ke semua node, dan metode langsung (1 dan 5) memiliki pendekatan yang berantakan, tidak baik untuk pengujian unit.
Untuk mengakses sesi jsp
<%=session.getAttribute("ShoppingCart.prop")%>
di Jstl:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
di Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
User
kacang hanya akan berfungsi jika Anda memanggil kacang di kelas yang juga memilikisession
cakupan, jika tidak, jika tidak ada sesi maka ia akan mengeluarkan pengecualian karena tidak akan ada sesi aktif dalam konteks @runtime saat kita menyuntikkanuser
kacang di kelas lain !!Menggunakan
@SessionAttributes
Lihat dokumen: Menggunakan @SessionAttributes untuk menyimpan atribut model dalam sesi HTTP di antara permintaan
" Memahami Atribut Sesi Model dan Model MVC Musim Semi " juga memberikan gambaran umum yang sangat bagus tentang sesi MVC Musim Semi dan menjelaskan bagaimana / kapan
@ModelAttribute
s ditransfer ke sesi (jika pengontrol@SessionAttributes
diberi keterangan).Artikel itu juga menjelaskan bahwa lebih baik menggunakan
@SessionAttributes
model daripada menyetel atribut secara langsung di HttpSession karena itu membantu Spring MVC menjadi view-agnostic.sumber
SessionAttribute
anotasi adalah yang paling sederhana dan langsung daripada mendapatkan sesi dari objek permintaan dan atribut pengaturan. Objek apa pun dapat ditambahkan ke model di controller dan itu akan disimpan dalam sesi jika namanya cocok dengan argumen di@SessionAttributes
anotasi. Di bawah ini misalnya,personObj
akan tersedia dalam sesi.sumber
Kode yang dianotasi di bawah ini akan menetapkan "nilai" menjadi "nama"
Untuk mengakses yang sama dalam penggunaan JSP
${sessionScope.name}
.Untuk
@ModelAttribute
melihat tautan inisumber
Bukankah itu termudah dan terpendek seperti itu? Saya mengetahuinya dan baru saja mengujinya - bekerja sempurna di sini:
ps Saya datang ke sini mencari jawaban dari " Bagaimana menggunakan atribut Sesi di Spring-mvc ", tetapi membaca begitu banyak tanpa melihat yang paling jelas yang telah saya tulis di kode saya. Saya tidak melihatnya, jadi saya pikir itu salah, tapi ternyata tidak. Jadi, mari berbagi pengetahuan itu dengan solusi termudah untuk pertanyaan utama.
sumber
Coba ini...
sumber
Ketika saya mencoba login saya (yang merupakan modal bootstrap), saya menggunakan anotasi @sessionattributes. Tetapi masalahnya adalah ketika tampilan adalah pengalihan ("redirect: / home"), nilai yang saya masukkan ke sesi ditampilkan di url. Beberapa sumber Internet menyarankan untuk mengikuti http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#mvc-redirecting Tetapi saya menggunakan HttpSession sebagai gantinya. Sesi ini akan ada sampai Anda menutup browser. Berikut adalah contoh kode
Anda tidak mengubah hal tertentu di sisi tampilan.
Setelah login tambahkan kode di atas ke sembarang tempat di situs web Anda. Jika sesi disetel dengan benar, Anda akan melihat nilai di sana. Pastikan Anda menambahkan tag jstl dan ekspresi El dengan benar (Ini adalah tautan untuk menyetel tag jstl https://menukablog.wordpress.com/2016/05/10/add-jstl-tab-library-to-you-project- benar / )
sumber
Gunakan Metode ini sangat sederhana dan mudah digunakan
di jsp sekali pakai lalu angkat
sumber
Di Spring 4 Web MVC. Anda dapat menggunakan
@SessionAttribute
metode ini dengan@SessionAttributes
di level Controllersumber